﻿using System;
using System.Collections.Generic;
using System.Text;
using Business.Entities;
using System.Data;
using System.Data.SqlClient;

namespace Data.Database
{
    public class ModuloUsuarioAdapter:Adapter
    {
        public List<ModuloUsuario> GetAll()
        {
            List<ModuloUsuario> ModuloUsuarios = new List<ModuloUsuario>();
            try
            {
                this.OpenConnection();
                SqlCommand cmdModuloUsuarios = new SqlCommand("select * from Modulos_Usuarios", SqlConn);
                SqlDataReader drModuloUsuarios = cmdModuloUsuarios.ExecuteReader();


                while (drModuloUsuarios.Read())
                {
                    ModuloUsuario mu = new ModuloUsuario();
                    mu.ID = (int)drModuloUsuarios["id_Modulo_Usuario"];
                    mu.Idmodulo = (int)drModuloUsuarios["id_Modulo"];
                    mu.Idusuario = (int)drModuloUsuarios["id_usuario"];
                    mu.Permitealta = (bool)drModuloUsuarios["alta"];
                    mu.Permitebaja = (bool)drModuloUsuarios["baja"];
                    mu.Permitemodificacion = (bool)drModuloUsuarios["modificacion"];
                    mu.Permitconsulta = (bool)drModuloUsuarios["consulta"];
                                      
                    
                    ModuloUsuarios.Add(mu);

                }
                drModuloUsuarios.Close();
            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar lista de ModuloUsuarios", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return ModuloUsuarios;
        }

        public Business.Entities.ModuloUsuario GetOne(int ID)
        {
            ModuloUsuario mu = new ModuloUsuario();


            try
            {
                this.OpenConnection();
                SqlCommand cmdModuloUsuarios = new SqlCommand("select  * from Modulos_Usuarios where id_Modulo_Usuario = @id", SqlConn);
                cmdModuloUsuarios.Parameters.Add("@id", SqlDbType.Int).Value = ID;
                SqlDataReader drModuloUsuarios = cmdModuloUsuarios.ExecuteReader();
                if (drModuloUsuarios.Read())
                {
                    mu.ID = (int)drModuloUsuarios["id_Modulo_Usuario"];
                    mu.Idmodulo = (int)drModuloUsuarios["id_Modulo"];
                    mu.Idusuario = (int)drModuloUsuarios["id_usuario"];
                    mu.Permitealta = (bool)drModuloUsuarios["alta"];
                    mu.Permitebaja = (bool)drModuloUsuarios["baja"];
                    mu.Permitemodificacion = (bool)drModuloUsuarios["modificacion"];
                    mu.Permitconsulta = (bool)drModuloUsuarios["consulta"];

                }
                drModuloUsuarios.Close();


            }
            catch (Exception Ex)
            {
                Exception ExcepcionManejada =
                new Exception("Error al recuperar datos del ModuloUsuario", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

            return mu;
        }


        public void Delete(int ID)
        {

            try
            {
                this.OpenConnection();
                SqlCommand cmdDelete = new SqlCommand("delete from Modulos_Usuarios where id_Modulo_Usuario=@id", SqlConn);
                cmdDelete.Parameters.Add("@id", SqlDbType.Int).Value = ID;
                cmdDelete.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al eliminar ModuloUsuario", Ex);
                throw ExcepcionManejada;

            }

            finally
            {
                this.CloseConnection();
            }


        }


        protected void Update(ModuloUsuario mu)
        {

            try
            {
                this.OpenConnection();
                SqlCommand cmdSave = new SqlCommand(
"UPDATE Modulos_Usuarios set id_Modulo=@id_modulo, id_usuario=@id_usuario, alta=@alta, baja=@baja, modififacion=@modificacion, consulta=@consulta WHERE id_Modulo_Usuario=@id", SqlConn);
                cmdSave.Parameters.Add("@id", SqlDbType.Int).Value = mu.ID;
                cmdSave.Parameters.Add("@id_Modulo", SqlDbType.Int).Value = mu.Idmodulo;
                cmdSave.Parameters.Add("@id_usuario", SqlDbType.Int).Value = mu.Idusuario;
                cmdSave.Parameters.Add("@alta", SqlDbType.Bit).Value = mu.Permitealta;
                cmdSave.Parameters.Add("@baja", SqlDbType.Bit).Value = mu.Permitebaja;
                cmdSave.Parameters.Add("@modificacion", SqlDbType.Bit).Value = mu.Permitemodificacion;
                cmdSave.Parameters.Add("@consulta", SqlDbType.Bit).Value = mu.Permitconsulta;
                cmdSave.ExecuteNonQuery();
            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al modificar datos del ModuloUsuario", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }


        protected void Insert(ModuloUsuario mu)
        {
            try
            {
                this.OpenConnection();
                SqlCommand cmdSave = new SqlCommand(
                "insert into Modulos_Usuarios(id_Modulo,id_usuario,alta,baja,modificacion,consulta) values(@id_Modulo,@id_usuario,@alta,@baja,@modificacion,@consulta) " +
                "select @@identity", SqlConn);

                cmdSave.Parameters.Add("@id", SqlDbType.Int).Value = mu.ID;
                cmdSave.Parameters.Add("@id_Modulo", SqlDbType.Int).Value = mu.Idmodulo;
                cmdSave.Parameters.Add("@id_usuario", SqlDbType.Int).Value = mu.Idusuario;
                cmdSave.Parameters.Add("@alta", SqlDbType.Bit).Value = mu.Permitealta;
                cmdSave.Parameters.Add("@baja", SqlDbType.Bit).Value = mu.Permitebaja;
                cmdSave.Parameters.Add("@modificacion", SqlDbType.Bit).Value = mu.Permitemodificacion;
                cmdSave.Parameters.Add("@consulta", SqlDbType.Bit).Value = mu.Permitconsulta;
                mu.ID = Decimal.ToInt32((decimal)cmdSave.ExecuteScalar());

            }

            catch (Exception Ex)
            {
                Exception ExcepcionManejada = new Exception("Error al crear ModuloUsuario", Ex);
                throw ExcepcionManejada;
            }
            finally
            {
                this.CloseConnection();
            }

        }





        public void Save(ModuloUsuario mu)
        {
            if (mu.State == BussinessEntity.States.Deleted)
            {
                this.Delete(mu.ID);
            }
            else if (mu.State == BussinessEntity.States.New)
            {
                this.Insert(mu);
            }
            else if (mu.State == BussinessEntity.States.Modified)
            {
                this.Update(mu);
            }
            mu.State = BussinessEntity.States.Unmodified;

        }



    }
}
